iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Python

從Python入門到自製遊戲:30天鐵人挑戰之旅系列 第 25

玩家輸入與球的位置更新

  • 分享至 

  • xImage
  •  

今天來做擋板及球的移動。

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and paddle_x > 0:
        paddle_x -= paddle_speed
    if keys[pygame.K_RIGHT] and paddle_x < screen_width - paddle_width:
        paddle_x += paddle_speed

    ball_x += ball_speed_x
    ball_y += ball_speed_y

使用 pygame.key.get_pressed() 來檢查所有目前被按下的按鍵狀態。這個函數會回傳一個布林值的列表,每個元素代表一個按鍵,值為 True 表示該按鍵被按下,False 則表示未被按下。利用這個特性我們可以輕易地檢查玩家是否按下了左右方向鍵 pygame.K_LEFT 或 pygame.K_RIGHT。

然後我們可以根據玩家的按鍵輸入來改變擋板(paddle_x)的橫向位置。程式碼中 if keys[pygame.K_LEFT] and paddle_x > 0 的條件判斷為,若玩家按下了左方向鍵並且擋板還沒有超出邊邊,那麼擋板就會向左移動。這樣的判斷方式有助於防止擋板移出遊戲視窗的範圍,讓遊戲邏輯更加穩定,右邊 if keys[pygame.K_RIGHT] and paddle_x < screen_width - paddle_width 也一樣同樣。這段程式碼還展示了如何透過簡單的變數來控制物件的移動速度。當按下方向鍵時,擋板的 x 座標值(paddle_x)會根據 paddle_speed 的值來做加減法更新,這樣就能夠控制擋板的移動速度。如果想加快擋板的移動,只需要調整 paddle_speed 的值即可。

ball_x += ball_speed_x 和 ball_y += ball_speed_y 會根據球的速度來更新球的座標位置。ball_speed_x 和 ball_speed_y 是球在 x 和 y 軸上的速度值。當這兩個值改變時,球的運動軌跡也會相應改變,像是改變 ball_speed_x 的正負號可以實現球在 x 軸上的左右反彈。

移動擋板時要考慮遊戲畫面邊界,沒有限制在邊框內的話可能算是一種開掛了。設置讓球自行移動蠻挑戰的,要因應速度而改變軌跡,正負號的影響下彈跳的位置便會不一樣。嘗試了好幾種方式,最後是決定用現在這個,比較簡易明瞭。不然其他種如果有問題要修改時時會常麻煩。

那今天就先這樣。/images/emoticon/emoticon29.gif


上一篇
遊戲主迴圈
下一篇
碰撞檢測
系列文
從Python入門到自製遊戲:30天鐵人挑戰之旅26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言